
package dao;

import java.util.List;
import java.util.Map;

/**
 * Interface du DAO devant être déclaré en @EJB
 * @author Alex
 */
public interface ObjectDAOI {

    /**
     * Enregistre un objet en base de données
     * @param object : l'objet à persister
     * @param id : l'id de l'objet à persister, permet de vérifier s'il existe déjà
     * @throws EntityAlreadyExistsException si un objet de même id existe déjà en base de données.
     */
    public void insert(Object object, Object id) throws EntityAlreadyExistsException;

    /**
     * Renvoie un objet à partir de la base de données
     * @param objectType : le type de l'objet à renvoyer
     * @param id : l'id de l'objet à récupérer
     * @return l'objet voulu
     * @throws InexistantEntityException si l'objet correspondant à cet id n'existe pas.
     */
    public Object get(Class objectType, Object id) throws InexistantEntityException;

    /**
     * Renvoie la liste de tous les objets d'un type depuis la base de données
     * @param objectType : le type des objets à renvoyer
     * @return
     */
    public List<?> getAll(Class objectType);

    /**
     * Renvoie la liste des objets respectant les critères d'une requête.
     * @param stringQuery la requête au format JPQL
     * @param parameterList la liste des paramètres de la requête : nom du paramètre associé à la valeur à tester
     * @return
     */
    public List<?> getObjectsQuery(String stringQuery, Map<String, Object> parameterList);

    /**
     * Met à jour un objet en base de données
     * @param object
     */
    public void update(Object object);

    /**
     * Supprimer un objet de la base de données
     * @param object
     */
    public void delete(Object object);

}
